Source code gets compiled to assembly and then assembly gets compiled to machine code. Assembly has a direct one-to-one mapping of its instructions to those in machine language. This makes assembly the only possible way to disambiguously take a look at what a program does. Assembly is essentially a human readable version of machine code.
There are two general syntax formats for writing Assembly - Intel and AT&T. I will be using Intel throughout my notes, but here is a list of common differences between the two because you never know which one you might have to read:
operation destination, source[]operation source, destinationb for byte, w for word, l long
movb %bl,%al
movw %bx,%ax
movl %ebx,%eax
movl (%ebx),%eax
% and immediate values with $()